package middlewares

import (
	"kms-backend/config"
	"kms-backend/utils/jwtutils"
	"kms-backend/utils/logs"

	"github.com/gin-gonic/gin"
)

func JwtValid(r *gin.Context) {
	// 除了登录和登出，其余接口都要验证token是否合法

	requestUrl := r.FullPath()
	logs.Debug(map[string]interface{}{"请求路径": requestUrl}, "")
	if requestUrl == "/api/auth/login" || requestUrl == "/api/auth/logout" {
		logs.Debug(map[string]interface{}{"请求路径": requestUrl}, "登录和登出不需要验证token")
		r.Next()
		return
	}

	// 使用定义的返回数据结构体
	returnData := config.NewReturnData()

	// 其他接口需要验证token合法性
	// 获取是否携带token
	tokenString := r.Request.Header.Get("Token")
	//fmt.Println(tokenString)
	if tokenString == "" {
		// 没有携带token
		returnData.Status = 401
		returnData.Message = "请求未携带token,请登录后尝试"
		r.JSON(200, returnData)
		r.Abort()
		return
	}
	// token 不为空,验证token是否合法

	claims, err := jwtutils.ParseToken(tokenString)
	if err != nil {
		returnData.Status = 401
		returnData.Message = "Token 验证未通过"
		r.JSON(200, returnData)
		r.Abort()
		return
	}
	// 验证通过
	r.Set("claims", claims)
	r.Next()
}
